package it.storm.solution;

/**
 * 1582. 二进制矩阵中的特殊位置
 * https://leetcode-cn.com/problems/special-positions-in-a-binary-matrix/
 */
public class Solutions_1582 {
    public static void main(String[] args) {
//        int[][] mat = {{1, 0, 0},
//                {0, 0, 1},
//                {1, 0, 0}};  // output: 1

//        int[][] mat = {{1, 0, 0},
//                {0, 1, 0},
//                {0, 0, 1}};  // output: 3

//        int[][] mat = {{0, 0, 0, 1},
//                {1, 0, 0, 0},
//                {0, 1, 1, 0},
//                {0, 0, 0, 0}};  // output: 2

        int[][] mat = {{0, 0, 0, 0, 0},
                {1, 0, 0, 0, 0},
                {0, 1, 0, 0, 0},
                {0, 0, 1, 0, 0},
                {0, 0, 0, 1, 1}};  // output: 3

        int result = numSpecial(mat);
        System.out.println(result);
    }

    public static int numSpecial(int[][] mat) {
        int row = mat.length;
        int col = mat[0].length;

        // 创建 map 数组，rows[2] = 2 表示在第 3 行中有 2 个 1 存在
        int[] rows = new int[row];
        // 创建 map 数组，cols[2] = 2 表示在第 3 列中有 2 个 1 存在
        int[] cols = new int[col];

        // 遍历 mat，统计第 i 行，第 j 列中 1 的数量
        for (int i = 0; i < row; i++) {
            for (int j = 0; j < col; j++) {
                if (mat[i][j] == 1) {
                    rows[i] += 1;
                    cols[j] += 1;
                }
            }
        }
        int res = 0;
        // 遍历 mat，对于每个 1，判断其所在行与所在列，1 的数量是否等于 1
        // 即当前行与当前列，除了自己本身外，没有其他的 1 了，说明是特殊位置
        for (int i = 0; i < row; i++) {
            for (int j = 0; j < col; j++) {
                if (mat[i][j] == 1) {
                    res += rows[i] == 1 && cols[j] == 1 ? 1 : 0;
                }
            }
        }
        return res;
    }
}
